package com.ufind.server.core.repository.base;

import com.ufind.server.facade.dto.base.BaseEntity;

import java.util.List;

/**
 * Created by xuliugen on 2016/3/13.
 */
public interface BaseRepository {

    /**
     * 根据实体id(String类型)进行删除操作
     */
    int deleteByPrimaryKey(String entityId);

    /**
     * 根据实体id(Long类型)进行删除操作
     */
    // int deleteByPrimaryKey(Long id);

    /**
     * 根据实体对象进行插入操作，不进行判空操作
     */
    <T extends BaseEntity> int insert(T entity);

    /**
     * 根据实体对象进行插入操作，进行判空操作
     */
    <T extends BaseEntity> int insertSelective(T entity);

    /**
     * 根据实体id进行查询
     */
    <T extends BaseEntity> T selectByPrimaryKey(String entityId);

//    <T extends BaseEntity> T selectByPrimaryKey(Long id);

    /**
     * 更新实体，进行判空操作
     */
    <T extends BaseEntity> int updateByPrimaryKeySelective(T entity);

    /**
     * 更新实体，不进行判空操作
     */
    <T extends BaseEntity> int updateByPrimaryKey(T entity);

    /**
     * 判断仓储中是否存在指定ID的实体实例。
     */
    <T extends BaseEntity> boolean exists(String entityId);

    /**
     * 查找指定类型的所有实体
     */
    <T extends BaseEntity> List<T> findAll();

}
